package app

import (
	"encoding/json"
	"fmt"
	"html/template"
	"reflect"
	"regexp"
)

// Find获取一个切片并在其中查找元素。如果找到它，它将返回它vlaue，否则它将返回-1和一个错误的bool。
func Find(slice []string, val string) (int, bool) {
	for i, item := range slice {
		if item == val {
			return i, true
		}
	}
	return -1, false
}

// email verify
func VerifyEmailFormat(email string) bool {
	//pattern := `\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*` //匹配电子邮箱
	pattern := `^[0-9a-z][_.0-9a-z-]{0,31}@([0-9a-z][0-9a-z-]{0,30}[0-9a-z]\.){1,4}[a-z]{2,4}$`

	reg := regexp.MustCompile(pattern)
	return reg.MatchString(email)
}

// mobile verify
func VerifyMobileFormat(mobileNum string) bool {
	regular := "^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$"
	reg := regexp.MustCompile(regular)
	return reg.MatchString(mobileNum)
}

func IsStructEmpty(obj interface{}) bool {
	value := reflect.ValueOf(obj).Len()
	if value > 0 {
		return true
	} else {
		return false
	}
}

// 把字符串解析成html
func Str2Html(str string) template.HTML {
	return template.HTML(str)
}

// 输出
func Print(v any) {
	bytes, _ := json.MarshalIndent(v, "", "    ")
	fmt.Printf("%s\n", bytes)
}

func JoinToStrslice(i any) []string {
	s := fmt.Sprintf("%v", i)
	s_slice := regexp.MustCompile(`[\w.]+`).FindAllString(s, -1)
	return s_slice
}

// 判断切片是否存在某个元素
func IsValueInList(value string, list []string) bool {
	for _, v := range list {
		if v == value {
			return true
		}
	}
	return false
}
